perm filename PRIMES.PAS[S1,ALS] blob
sn#392597 filedate 1978-11-07 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 (*$L+*)
C00004 ENDMK
Cā;
(*$L+*)
PROGRAM PRIMES(OUTPUT); (* Modified copy from Wirth p 54* for the PDP-10*)
CONST
WDLENGTH = 36; MAXBIT = 35; W = 100; (* To find primes below 3600*)
VAR
SIEVE,PRIMES : ARRAY[0..W] OF SET OF 0..MAXBIT;
NEXT : RECORD WORD,BIT : INTEGER END;
J,K,T,C : INTEGER;
EMPTY : BOOLEAN;
BEGIN
FOR T := 0 TO W DO BEGIN SIEVE[T] := [0..MAXBIT]; PRIMES[T] := [] END;
SIEVE[0] := SIEVE[0] - [0]; NEXT.WORD := 0; NEXT.BIT := 1; EMPTY := FALSE;
WITH NEXT DO REPEAT
WHILE NOT (BIT IN SIEVE[WORD]) DO BIT := SUCC(BIT);
PRIMES[WORD] := PRIMES[WORD] + [BIT];
C := 2*BIT + 1; J := BIT; K := WORD;
WHILE K<=W DO BEGIN
SIEVE[K] := SIEVE[K] - [J]; K := K + WORD*2; J := J+C;
WHILE J>MAXBIT DO BEGIN K :=K+1; J :=J - WDLENGTH END
END;
IF SIEVE[WORD] = [] THEN BEGIN EMPTY := TRUE; BIT := 0 END;
WHILE EMPTY AND (WORD<W) DO BEGIN
WORD := WORD + 1; EMPTY := SIEVE[WORD] = [] END
UNTIL EMPTY;
END.